1020 DIM U%(22):FOR I=0 TO 21:READ U%(I):NEXT:DATA&H8B55,&HB8EC,&H0600,&H07B7,&H768B,&H8A0C,&H8B2C,&HA76,&HC8A,&H768B,&H8A08,&H8B34,&H676,&H148A,&HCDFE,&HC9FE,&HCEFE,&HCAFE,&H10CD,&HCA5D,&H8,&H0
1030 OPEN "DD" FOR INPUT AS 1: INPUT #1,DR$:CLOSE
1040 DEF FNPN(S)=CVI(MID$(P$(0),S*2-1,2))
1041 DEF FNMFP(F)=CVI(MID$(P$(F),1,2))
1042 DEF FNNP(F)=CVI(MID$(P$(F),3,2))
1043 DEF FNL(Y)=7+(Y MOD 10)+(-10*(Y MOD 10 = 0))
1048 MF$="###################,.##"
1050 IF CHR$(SCREEN(2,27))<>"T" THEN CLS: COLOR 0,7:PRINT SPACE$(240):LOCATE 2,27:PRINT "The Omaha DataBase Program":LOCATE 1,1:PRINT"KEY";STRING$(78,"THEN");"CLOSE":LOCATE 2,1:PRINT "OPEN":LOCATE 2,80:PRINT "OPEN":LOCATE 3,1:PRINT "SCREEN";STRING$(78,"THEN");"LOAD": COLOR 7,0
1810 FI$(F)=DR$(F)+":"+F$(F):QZ=4:IF F=0 THEN QZ=10:
1820 OPEN FI$(F) AS #F+1 LEN=LL(F):FIELD #F+1,QZ AS P$(F):FOR Y=1 TO TE(F)
1830 IF QZ>510 THEN FIELD #F+1,255 AS Q1$,255 AS Q2$,QZ-510 AS Q3$,BL(F,Y) AS X$(F,Y) ELSE IF QZ>255 THEN FIELD #F+1,255 AS Q1$,QZ-255 AS Q2$,BL(F,Y) AS X$(F,Y) ELSE IF QZ=<255 THEN FIELD #F+1,QZ AS Q1$,BL(F,Y) AS X$(F,Y)
1840 QZ=QZ+BL(F,Y):NEXT
1850 RETURN
1860 FI$=DR$+":REC":OPEN FI$ FOR INPUT AS #7
1870 IF EOF(7) THEN 1880
1875 FOR G=0 TO TF:INPUT #7,NR(G),DL(G):NEXT:
1880 CLOSE #7:FOR G=0 TO TF: IF NR(G)=0 THEN NR(G)=1:
1890 NEXT
1900 RETURN
1910 FI$=DR$=":REC":OPEN FI$ FOR OUTPUT AS #7: FOR G=0 TO TF:WRITE#7,NR(G),DL(G):NEXT:CLOSE #7:RETURN
2130 REM INPUT ROUTINE
2140 R=CSRLIN:C=POS(0):FLAG=0
2150 IN$=""
2160 DEF SEG=0:POKE &H6A,0:POKE 1052,PEEK(1050)
2170 C3=C+LEN(IN$):COLOR 18:IF T(F,Y)<>3 THEN 2175 ELSE C3=C+LEN(IN$)+(-1*(LEN(IN$)=>2))+(-1*(LEN(IN$)=>4))
2175 LOCATE R,C3:PRINT CHR$(SCREEN(R,C3))
2180 I$=INKEY$:IF I$="" THEN 2180
2190 COLOR 0,7:LOCATE R,C+LEN(IN$):PRINT CHR$(SCREEN(R,C+LEN(IN$)))
2200 IF ASC(LEFT$(I$,1))=0 THEN FLAG=ASC(MID$(I$,2))-58:BEEP:GOTO 2350
2210 IF I$=CHR$(8) AND LEN(IN$)>0 THEN IN$=LEFT$(IN$,LEN(IN$)-1):LOCATE R,C:PRINT IN$;" ":GOTO 2170 ELSE IF I$=CHR$(8) AND LEN(IN$)=0 THEN BEEP:GOTO 2180
2220 IF I$=CHR$(13) AND IN$="" THEN IN$=X$(F,Y):LSET X$(F,Y)=IN$:RETURN ELSE IF I$=CHR$(13) AND T(F,Y)<> 3 THEN LOCATE R,C:PRINT LEFT$(IN$+STRING$(50,32),BL(F,Y)):RETURN ELSE IF I$=CHR$(13) THEN RETURN
2230 IF I$=CHR$(27) THEN LOCATE R,C:PRINT STRING$(LEN(IN$),32);:GOTO 2170
2240 IF T(F,Y)=1 THEN 2280
2250 IF T(F,Y)=2 AND INSTR("0123456789+=-Ee#",I$)=0 THEN BEEP:GOTO 2170
2260 IF T(F,Y)=3 AND INSTR("0123456789",I$)=0 THEN BEEP:GOTO 2170
2270 IF T(F,Y)=4 AND INSTR("01234567890+-",I$)=0 THEN BEEP:GOTO 2170
2280 IF LEN(IN$)+1>BL(F,Y) THEN BEEP:GOTO 2170
2290 IN$=IN$+I$:WRT=1
2300 IF T(F,Y)<>3 THEN 2310 ELSE IF VAL(MID$(IN$,1,2))>12 THEN BEEP:GOTO 2150 ELSE IF VAL(MID$(IN$,3,2))>31 THEN BEEP:GOTO 2150
2310 IF T(F,Y)=1 OR T(F,Y)=2 THEN LOCATE R,C:PRINT IN$:GOTO 2170
2320 IF T(F,Y)=3 THEN LOCATE R,C: PRINT LEFT$(IN$,2);"/";MID$(IN$,3,2);"/";MID$(IN$,5,2):GOTO 2170
2330 IF T(F,Y)=4 THEN LOCATE R,C:PRINT USING RIGHT$(MF$,BL(F,Y)+1);VAL(IN$):GOTO 2170
3030 LOCATE 5,1:COLOR 9: PRINT "INSTRUCTIONS":COLOR 7,0:PRINT"You will have to pick a file for the primary sort. This means that all records from this file will be sorted, even if more than one are linked to a master file";
3040 PRINT "The file for the secondary sort (if you have one) will be sorted if it is linkedto the records of the file for the primary sort. "
3050 PRINT "YOU MAY USE ONLY ONE SUB-FILE IN A SORT!"
3060 LOCATE 22,3:COLOR 15: PRINT "INDICATE NUMBER OF FILE FOR PRIMARY SORT": COLOR 7,0: LOCATE 12,,20: PRINT "These are your files":PRINT:FOR F=0 TO TF: LOCATE ,20:PRINT F". ";F$(F):NEXT:COLOR 7,0
3070 A$=INKEY$: IF A$="" THEN 3070
3080 IF INSTR("1234567890",A$)=0 THEN GOSUB 1270:GOTO 3060
3090 PF=VAL(A$): IF PF>TF THEN GOSUB 1270:GOTO 3060
3100 LOCATE 22,3:COLOR 15: BEEP:PRINT "INDICATE NUMBER OF FILE FOR **SECONDARY** SORT" :LOCATE 21,3:PRINT "Press 'ENTER' to indicate NO file for secondary sort":COLOR 7,0
3110 A$=INKEY$: IF A$="" THEN 3110
3120 IF INSTR("1234567890"+CHR$(13),A$)=0 THEN GOSUB 1270:GOTO 3110
3130 IF A$=CHR$(13) THEN SF=7:GOTO 3150
3140 SF=VAL(A$): IF SF>TF THEN GOSUB 1270:GOTO 3060 ELSE BEEP
3480 COLOR 0,7:PRINT "KEY FILE FIELD BEGINNING LENGTH":COLOR 7,0
3490 FOR K=1 TO TK:LOCATE 8+K,1:PRINT K".";:LOCATE 8+K,8:PRINT F$(K(K,1));:LOCATE 8+K,26:PRINT T$(K(K,1),K(K,2));:LOCATE 8+K,43:PRINT K(K,3);:LOCATE 8+K,55:PRINT K(K,4)
3500 NEXT
3510 LOCATE 22,3:INPUT "DO YOU WANT TO SAVE THESE KEYS NOW (Y/N) ";AN$
3520 IF AN$="Y" OR AN$="y" OR AN$="" THEN GOSUB 5000 ELSE 3010
3530 SI$=DR$(F)+":"+"F"+MID$(STR$(PF),2)+".INX"
3540 REM MAY OR MAY NOT HAVE TO REWRITE KEY FIELDS
3550 IF SF<>7 THEN 3610
3560 REM NO REWRITE NECESSARY
3570 LOCATE 22,3:PRINT "NO RE-WRITE NECESSARY "
3600 G1$=DR$(PF)+":"+F$(PF):GOTO 3920
3610 REM SECONDARY FILE REWRITE KEY FIELDS
3620 GOSUB 5000:
3630 GOSUB 1130:GOSUB 1170
3640 LOCATE 7,1:COLOR 9:PRINT "CREATION OF FILE OF KEY FIELDS":COLOR 7,0
3650 PRINT:PRINT "You will be asked to indicate:":PRINT "(1) the drive that contains the primary file: ";F$(PF):PRINT "(2) the drive that contains the secondary: ";F$(SF):PRINT
3660 PRINT"In addition, one of the disks must contain enough room to allow you to write the key fields file to be used for sorting."
3670 PRINT "The sorted index is always written on the data disk"
3675 PRINT "The Index File will be named after the file for the primary sort: F";MID$(STR$(PF),2,1);".INX"
6040 FOR Y=E1 TO E2:COLOR 7,0:LOCATE FNL(Y),1:PRINT LEFT$(STR$(Y)+". "+T$(F,Y)+" ",15);" ";:COLOR 0,7
6050 IF T(F,Y)=1 OR T(F,Y)=2 THEN PRINT X$(F,Y):GOTO 6080
6060 IF T(F,Y)=3 AND LEN(X$(F,Y))>2 THEN PRINT MID$(X$(F,Y),1,2);"/";MID$(X$(F,Y),3,2);"/";MID$(X$(F,Y),5,2):GOTO 6080 ELSE IF T(F,Y)=3 THEN PRINT X$(F,Y):GOTO 6080
6070 IF T(F,Y)=4 THEN PRINT USING RIGHT$(MF$,BL(F,Y)+1);VAL(X$(F,Y))
6080 NEXT:COLOR 7,0:
6090 IF F=F1 AND F2>E1 AND F2<=E2 THEN E1=F2
6100 RETURN
9000 REM EXIT
9010 RESET:RUN "MENU
9110 COLOR 9:PRINT "F10":COLOR 7,0:PRINT " Return to Menu"
9310 LOCATE 7,1: COLOR 9:PRINT "# TITLE TYPE BEGINNING LENGTH":COLOR 15
9320 IF F<>0 THEN E1=0:GOTO 9340 ELSE E1=1:GOTO 9340
9340 COLOR 15:IF E1+ 9=>TE(F) THEN E2=TE(F) ELSE E2=E1+9
9350 FOR Y=E1 TO E2
9360 IF Y=0 THEN LOCATE 8,1 ELSE LOCATE 8+(Y MOD 10)+(-10*(Y MOD 10 =0)),1
9361 PRINT Y". ";LEFT$(T$(F,Y)+" ",24);
9370 LOCATE ,22:IF T(F,Y)=1 THEN PRINT "ALPHA "; ELSE IF T(F,Y)=2 THEN PRINT "NUMBER"; ELSE IF T(F,Y)=3 THEN PRINT "DATE "; ELSE IF T(F,Y)=4 THEN PRINT "$$$.$$"; ELSE PRINT " ";
9380 PRINT " ";BB(F,Y);" ";BL(F,Y):NEXT:COLOR 7,0
9390 GOSUB 1150: IF E2<TE(F) THEN LOCATE 22,3: INPUT "Press the 'ENTER' key to continue ";AN$: IF VAL(AN$)<>0 THEN K$=AN$:RETURN ELSE E1=E2+1:GOTO 9340
9395 RETURN
9400 REM
9410 LOCATE 12,20:COLOR 15: PRINT "INDICATE NUMBER OF FILE FOR PRIMARY SORT": FOR F=0 TO TF: LOCATE ,20:PRINT F". ";F$(F):NEXT:COLOR 7,0
30000 OLDROW=CSRLIN:OLDCOL=POS(0):OPEN "ERROR" AS #7 LEN=176:FIELD #7,35 AS ER$(1),70 AS ER$(2),70 AS ER$(3):GET#7,ERR
30010 LOCATE 20,3:PRINT LEFT$(ER$(1),INSTR(ER$(1)," ")+(-40*INSTR(ER$(1)," ")=0));" IN LINE ";ERL;" (Press any key)":LOCATE 21,3:PRINT ER$(2):LOCATE 22,3:PRINT ER$(3):PLAY"MB":J9=2:FOR I9=1 TO 9:PLAY"L64T255O=J9;CC#DD#EFF#GG#AA#B":NEXT
30020 AE$=INKEY$:IF AE$=""THEN 30020 ELSE FOR EL=20 TO 22:LOCATE EL,3:PRINT STRING$(76,32);:NEXT:LOCATE OLDROW,OLDCOL:CLOSE#3:RESUME
40000 REM **********************************************************
40010 REM **********************************************************
40020 REM ** COPYRIGHT (C) 1984, 1988 GERALD E. GONDERINGER **
40030 REM ** The Omaha DataBase Program **
40040 REM ** $50.00 REGISTRATION FEE FOR USE OF PROGRAM **
40050 REM **********************************************************
40060 REM **********************************************************